home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / C and C++ / Science⁄Math / Scientist's Helper src / s.helper.3 / regcmdloop.c next >
C/C++ Source or Header  |  1986-02-06  |  11KB  |  476 lines

  1. #include "all.h"
  2. #include "regtabext.h"
  3.  
  4. CmdFromWnd(c, fromCommandWindow)
  5. char c[];
  6. int fromCommandWindow;
  7. {
  8.     if( c[0]=='>' ) { /* get rid of prompt */
  9.         c[0]=' ';
  10.         }
  11.     RegTabCmd( c, fromCommandWindow );
  12. }
  13.  
  14. RegTabCmd( c, fromCommandWindow )
  15. char c[];
  16. int fromCommandWIndow;
  17. {
  18.     int i, j, k, ii, jj;
  19.     float x, y;
  20.     char s[cmdWordLen];
  21.     
  22.     strncpy( command.cmdStr, c, cmdWordLen-1 );
  23.     command.cmdStr[cmdWordLen-1] = '\0'; /*just in case*/
  24.     if( !SBreak(&command, TRUE) ) {
  25.         WriteLine("bad command line");
  26.         ErrMsg(command.cmdStr);
  27.         }
  28.     strcpy( cmdWord0, command.cmdWord[0] );
  29.     
  30.     /*special code to handle case of pending input*/
  31.     /*several commands ask for input, including the cursor and input commands*/
  32.     if( pendingFlag ) {
  33.         pendingFlag=FALSE;
  34.         NoPendingInput();
  35.         if( strlen(pentName)!=0 ) {
  36.             if( !SetVar(pentName,cmdWord0) ) {
  37.                 ErrMsg("couldnt set input variable");
  38.                 }
  39.             }
  40.         }
  41.     else {
  42.         
  43.     if( (strlen(cmdWord0)==0) || (strcmp(cmdWord0,"label")==0) ) {
  44.         ; /*do nothing*/
  45.         }
  46.     else if( strcmp(cmdWord0,"quit")==0 ) {
  47.         doneFlag = TRUE;
  48.         }
  49.     else if( (strcmp(cmdWord0,"p")==0) || (strcmp(cmdWord0,"prompt")==0) ) {
  50.         for( i=1; i<(numCmdWds-1); i++ ) {
  51.             if(strlen(command.cmdWord[i])!=0) WritePhrase( command.cmdWord[i] );
  52.             }
  53.         WriteLine( command.cmdWord[numCmdWds-1] );
  54.         }
  55.     else if ( strcmp(cmdWord0,"beep")==0 ) {
  56.         SysBeep(5);
  57.         }
  58.     else if( strcmp(cmdWord0,"setvar")==0 ) {
  59.         if( !SetVar( command.cmdWord[1], command.cmdWord[2] ) ) {
  60.             ErrMsg("couldnt create variable");
  61.             }
  62.         }
  63.     else if( strcmp(cmdWord0,"delete")==0 ) {
  64.         if( (strcmp(command.cmdWord[1],"v")==0) || (strcmp(command.cmdWord[1],"variable")==0) ){
  65.             if( !DelVar( command.cmdWord[2] ) ) {
  66.                 ErrMsg("couldnt delete variable");
  67.                 }
  68.             }
  69.         else {
  70.             DelCommand();
  71.             RedoEditWindow();
  72.             }
  73.         }
  74.     else if( (strcmp(cmdWord0,"t")==0) || (strcmp(cmdWord0,"type")==0) ) {
  75.         if( (strcmp(command.cmdWord[1],"v")==0) || (strcmp(command.cmdWord[1],"variables")==0) ) {
  76.             ListVars();
  77.             }
  78.         else if( (strcmp(command.cmdWord[1],"c")==0) || (strcmp(command.cmdWord[1],"col")==0) ) {
  79.             SToI( command.cmdWord[2], &i );
  80.             if( GoodCol(i)!=0 ) {
  81.                 ErrMsg( noSuchColumn );
  82.                 }
  83.             WriteLine( table.header.colName[i-1] );
  84.             for( j=1; j<=table.header.rows; j++ ) {
  85.                 CheckAbortMenu();
  86.                 GetTable( j, i, &x );
  87.                 IToS( j, s );
  88.                 strcat( s, "   " );
  89.                 WritePhrase( s );
  90.                 RToS( x, s );
  91.                 WriteLine( s );
  92.                 }
  93.             }
  94.     
  95.         else {
  96.             ErrMsg( noSuchModifier );
  97.             }
  98.         }
  99.     else if( strcmp(cmdWord0,"allocate")==0 ) {
  100.         SToI( command.cmdWord[1], &i );
  101.         SToI( command.cmdWord[2], &j );
  102.         AllocTable( i, j );
  103.         RedoEditWindow();
  104.         }
  105.     else if( strcmp(cmdWord0,"title")==0 ) {
  106.         strcpy( table.header.title, command.cmdWord[1] );
  107.         Header2Vars();
  108.         }
  109.     else if( strcmp(cmdWord0,"interpolated")==0 ) {
  110.         if( (strlen(command.cmdWord[1])==0) || (strcmp(command.cmdWord[1],"true")==0) ) {
  111.             table.header.interpolated = TRUE;
  112.             }
  113.         else if( strcmp(command.cmdWord[1],"false")==0 ) {
  114.             table.header.interpolated = FALSE;
  115.             }
  116.         else {
  117.             ErrMsg( noSuchModifier );
  118.             }
  119.         Header2Vars();
  120.         CreateCol1();
  121.         RedoEditWindow();
  122.         }
  123.     else if( strcmp(cmdWord0,"rows")==0 ) {
  124.         SToI( command.cmdWord[1], &i );
  125.         if( GoodRow(i)==2 ) {
  126.             ErrMsg( noSuchRow );
  127.             }
  128.         else {
  129.             j = table.header.rows;
  130.             table.header.rows = i;
  131.             Header2Vars();
  132.             if( j<i ) {
  133.                 CreateCol1();
  134.                 }
  135.             RedoEditWindow();
  136.             }
  137.         }
  138.     else if( strcmp(cmdWord0,"cols")==0 ) {
  139.         SToI( command.cmdWord[1], &i );
  140.         if( GoodCol(i)==2 ) {
  141.             ErrMsg( noSuchCol );
  142.             }
  143.         else {
  144.             table.header.cols = i;
  145.             Header2Vars();
  146.             RedoEditWindow();
  147.             }
  148.         }
  149.     else if( strcmp(cmdWord0,"start")==0 ) {
  150.         SToR( command.cmdWord[1], &x, FALSE );
  151.         table.header.start = x;
  152.         Header2Vars();
  153.         CreateCol1();
  154.         RedoEditWindow();
  155.         }
  156.     else if( strcmp(cmdWord0,"samp")==0 ) {
  157.         SToR( command.cmdWord[1], &x, FALSE );
  158.         if( x==0.0 ) {
  159.             ErrMsg("samp cant be zero");
  160.             }
  161.         table.header.samp = x;
  162.         Header2Vars();
  163.         CreateCol1();
  164.         RedoEditWindow();
  165.         }
  166.     else if( strcmp(cmdWord0,"colname")==0 ) {
  167.         SToI( command.cmdWord[1], &i );
  168.         if( GoodCol(i)!=0 ) {
  169.             ErrMsg( noSuchCol );
  170.             }
  171.         strcpy( s, command.cmdWord[2] );
  172.         s[10] = '\0'; /*just in case its too long*/
  173.         strcpy( table.header.colName[i-1], s );
  174.         RedoEditWindow();
  175.         }
  176.     else if( strcmp(cmdWord0,"table")==0 ) {
  177.         SToI( command.cmdWord[1], &i );
  178.         SToI( command.cmdWord[2], &j );
  179.         if( strlen(command.cmdWord[3])==0 ) {
  180.             GetTable(i, j, &x);
  181.             RToS( x, s );
  182.             WriteLine( s );
  183.             }
  184.         else {
  185.             SToR( command.cmdWord[3], &x, TRUE );
  186.             SetTable( i, j, x, FALSE );
  187.             RedoEditWindow();
  188.             }
  189.         }
  190.     else if( strcmp(cmdWord0,"set")==0 ) {
  191.         if( strcmp(command.cmdWord[2],"table")==0 ) {
  192.             SToI( command.cmdWord[3], &i );
  193.             SToI( command.cmdWord[4], &j );
  194.             GetTable(i, j, &x);
  195.             RToS( x, s );
  196.             if( !SetVar( command.cmdWord[1],s) ) {
  197.                 ErrMsg("couldnt create variable");
  198.                 }
  199.             }
  200.         else if( strcmp(command.cmdWord[2],"colname")==0 ) {
  201.             SToI( command.cmdWord[3], &i );
  202.             if( GoodCol(i)!=0 ) {
  203.                 ErrMsg( noSuchColumn );
  204.                 }
  205.             if( !SetVar(command.cmdWord[1],table.header.colName[i-1]) ) {
  206.                 ErrMsg("couldnt create variable");
  207.                 }
  208.             }
  209.         else if( strcmp(command.cmdWord[2],"coefficient")==0 ) {
  210.             SToI( command.cmdWord[3], &i );
  211.             if( (i<0) || (i>nCoeffs) ) {
  212.                 ErrMsg( "no such coefficient" );
  213.                 }
  214.             RToS( coeffs[i], s );
  215.             if( !SetVar(command.cmdWord[1],s )) {
  216.                 ErrMsg("couldnt create variable");
  217.                 }
  218.             }
  219.         else {
  220.             ErrMsg( noSuchModifier );
  221.             }
  222.         }
  223.     else if ( (strcmp(cmdWord0,"x")==0) || (strcmp(cmdWord0,"execute")==0) ) {
  224.         if( !mem.active ) {     /*calls from console construct new label list*/
  225.             ListLabels();   /*calls from within procedure cannot change procedure memory*/
  226.             PendingInput();
  227.             mem.active = TRUE;
  228.             }
  229.         if( !FindLabel(command.cmdWord[1],&i) ) {
  230.             ErrMsg( "cant find label" );
  231.             }
  232.         else if( mem.stackPtr >= (stackLen-1) ) {
  233.             ErrMsg( "too many levels of procedures" );
  234.             }
  235.         mem.stackPtr++;
  236.         mem.stack[mem.stackPtr] = i;
  237.         i =  SetVar("arg1",command.cmdWord[2] ) && SetVar("arg2",command.cmdWord[3] )
  238.             && SetVar("arg3",command.cmdWord[4] ) && SetVar("arg4",command.cmdWord[5] );
  239.         if (!i) {
  240.             ErrMsg("not enough space for argument variables");
  241.             }
  242.         }
  243.     else if( strcmp(cmdWord0,"goto")==0 ) {
  244.         if( !mem.active ) {
  245.             ErrMsg("cant goto from console");
  246.             }
  247.         if( !FindLabel(command.cmdWord[1],&i) ) {
  248.             ErrMsg( "cant find label" );
  249.             }
  250.         mem.stack[mem.stackPtr] = i;
  251.         }
  252.     else if( strcmp(cmdWord0,"return")==0 ) {
  253.         ReturnCommand();
  254.         }
  255.     else if( strcmp(cmdWord0,"for")==0 ) {
  256.         ForCommand();
  257.         }
  258.     else if( strcmp(cmdWord0,"next")==0 ) {
  259.         NextCommand();
  260.         }
  261.     else if( strcmp(cmdWord0,"if")==0 ) {
  262.         IfCommand();
  263.         }
  264.     else if( (strcmp(cmdWord0,"vm")==0) || (strcmp(cmdWord0,"vmath")==0) ) {
  265.         VMathCommand();
  266.         }
  267.     else if( (strcmp(cmdWord0,"vf")==0) || (strcmp(cmdWord0,"vfunction")==0) ) {
  268.         VFunctionCommand();
  269.         }
  270.     else if( strcmp(cmdWord0,"concat")==0 ) {
  271.         strcpy(s,command.cmdWord[2]);
  272.         for( i=3; i<numCmdWds; i++ ) {
  273.             j=cmdWordLen - strlen(s) - 1;
  274.             strncat(s,command.cmdWord[i],j);
  275.             }
  276.         if( !SetVar(command.cmdWord[1],s) ) {
  277.             ErrMsg("couldnt create variable");
  278.             }
  279.         }
  280.     else if( strcmp(cmdWord0,"sleep")==0 ) {
  281.         SToR( command.cmdWord[1], &x, FALSE );
  282.         i = (int)(x*60.0);
  283.         Delay( (long)i, (long*)(&x));
  284.         }
  285.     else if( strcmp(cmdWord0,"input")==0 ) {
  286.         WriteLine( command.cmdWord[2] );
  287.         strcpy( pentName, command.cmdWord[1] );
  288.         pendingFlag=TRUE;
  289.         PendingInput();
  290.         }
  291.     else if( strcmp(cmdWord0,"cursor")==0 ) {
  292.         WriteLine( command.cmdWord[1] );
  293.         pentName[0]='\0';
  294.         pendingFlag=TRUE;
  295.         PendingInput();
  296.         SelectWindow(theWindow[grWindow]);
  297.         }
  298.     else if( strcmp(cmdWord0,"xaxis")==0 ) {
  299.         SToR( command.cmdWord[1], &x, FALSE);
  300.         SToR( command.cmdWord[2], &y, FALSE);
  301.         if( x<y ) {
  302.             graph.xMin=x;
  303.             graph.xMax=y;
  304.             }
  305.         else {
  306.             ErrMsg("xmin > xmax");
  307.             }
  308.         Graph2Vars();
  309.         }
  310.     else if( strcmp(cmdWord0,"yaxis")==0 ) {
  311.         SToR( command.cmdWord[1], &x, FALSE);
  312.         SToR( command.cmdWord[2], &y, FALSE);
  313.         if( x<y ) {
  314.             graph.yMin=x;
  315.             graph.yMax=y;
  316.             }
  317.         else {
  318.             ErrMsg("ymin > ymax");
  319.             }
  320.         Graph2Vars();
  321.         }
  322.     else if( strcmp(cmdWord0,"plot")==0 ) {
  323.         PlotCol();
  324.         }
  325.     else if( strcmp(cmdWord0,"clear")==0 ) {
  326.         ClearGraph();
  327.         }
  328.     else if( strcmp(cmdWord0,"axes")==0 ) {
  329.         PlotAxes();
  330.         }
  331.     else if( strcmp(cmdWord0,"insert")==0 ) {
  332.         InsCommand();
  333.         RedoEditWindow();
  334.         }
  335.     else if( strcmp(cmdWord0,"trend")==0 ) {
  336.         Trend();
  337.         RedoEditWindow();
  338.         }
  339.     else if( strcmp(cmdWord0,"interpolate")==0 ) {
  340.         TabInterpolate();
  341.         RedoEditWindow();
  342.         }
  343.     else if( strcmp(cmdWord0,"spline")==0 ) {
  344.         SplInterpolate();
  345.         RedoEditWindow();
  346.         }
  347.     else if( strcmp(cmdWord0,"sort")==0 ) {
  348.         SortTable();
  349.         RedoEditWindow();
  350.         }
  351.     else if( strcmp(cmdWord0,"polyfit")==0 ) {
  352.         polyfit();
  353.         RedoEditWindow();
  354.         }
  355.     else if( strcmp(cmdWord0,"multifit")==0 ) {
  356.         multifit();
  357.         RedoEditWindow();
  358.         }
  359.     else if( strcmp(cmdWord0,"noise")==0 ) {
  360.         noise();
  361.         RedoEditWindow();
  362.         }
  363.  
  364.     else if( strcmp(cmdWord0,"mean")==0 ) {
  365.         Mean();
  366.         RedoEditWindow();
  367.         }
  368.     else if( strcmp(cmdWord0,"swap")==0 ) {
  369.         SwapCommand();
  370.         RedoEditWindow();
  371.         }
  372.     else if( strcmp(cmdWord0,"copy")==0 ) {
  373.         CopyCommand();
  374.         RedoEditWindow();
  375.         }
  376.     else if( strcmp(cmdWord0,"scale")==0 ) {
  377.         GScan();
  378.         Graph2Vars();
  379.         }
  380.     else if( (strcmp(cmdWord0,"cm")==0) || (strcmp(cmdWord0,"cmath")==0) ) {
  381.         ColMath();
  382.         RedoEditWindow();
  383.         }
  384.     else if( (strcmp(cmdWord0,"cf")==0) || (strcmp(cmdWord0,"cfunction")==0) ) {
  385.         ColFunction();
  386.         RedoEditWindow();
  387.         }
  388.     else if( strcmp(cmdWord0,"min")==0 ) {
  389.         SToI( command.cmdWord[1], &i );
  390.         ColMin( i, &x );
  391.         RToS( x, s ); 
  392.         WriteLine(s);
  393.         if( !SetVar("min",s) ) {
  394.             ErrMsg("couldnt set variable");
  395.             }
  396.         }
  397.     else if( strcmp(cmdWord0,"max")==0 ) {
  398.         SToI( command.cmdWord[1], &i );
  399.         ColMax( i, &x );
  400.         RToS( x, s ); 
  401.         WriteLine(s);
  402.         if( !SetVar("max",s) ) {
  403.             ErrMsg("couldnt set variable");
  404.             }
  405.         }
  406.     else if( strcmp(cmdWord0,"constant")==0 ) {
  407.         SToR( command.cmdWord[1], &x, TRUE );
  408.         SToI( command.cmdWord[2], &j );
  409.         if( strlen(command.cmdWord[3])==0 ) {
  410.             ii=1;
  411.             }
  412.         else {
  413.             SToI( command.cmdWord[3], &ii );
  414.             }
  415.         if( strlen(command.cmdWord[4])==0 ) {
  416.             jj=table.header.rows;
  417.             }
  418.         else {
  419.             SToI( command.cmdWord[4], &jj );
  420.             }
  421.         for( i=ii; i<=jj; i++ ) {
  422.             SetTable( i, j, x, FALSE );
  423.             }
  424.         RedoEditWindow();
  425.         }
  426.     else if( strcmp(cmdWord0,"bandpass")==0 ) {
  427.         bandpass();
  428.         RedoEditWindow();
  429.         }
  430.     else if( strcmp(cmdWord0,"spectrum")==0 ) {
  431.         spect();
  432.         RedoEditWindow();
  433.         }
  434.  
  435.     else if( strcmp(cmdWord0,"integrate")==0 ) {
  436.         integrate();
  437.         RedoEditWindow();
  438.         }
  439.     else if( (strcmp(cmdWord0,"diff")==0) || (strcmp(cmdWord0,"differentiate")==0) ) {
  440.         differentiate();
  441.         RedoEditWindow();
  442.         }
  443.     else if( strcmp(cmdWord0,"sum")==0 ) {
  444.         summation();
  445.         RedoEditWindow();
  446.         }
  447.     else if( strcmp(cmdWord0,"histogram")==0 ) {
  448.         histogram();
  449.         RedoEditWindow();
  450.         }
  451.     else if( strcmp(cmdWord0,"taper")==0 ) {
  452.         taper();
  453.         RedoEditWindow();
  454.         }
  455.     else if( (strcmp(cmdWord0,"conv")==0) || (strcmp(cmdWord0,"convolve")==0) ) {
  456.         convolve();
  457.         RedoEditWindow();
  458.         }
  459.  
  460.     else {
  461.         ErrMsg("no such command");
  462.         }
  463.         
  464.     } /*end if not pending*/
  465.         
  466.     if( (!mem.active) && (!pendingFlag) ) { /*prompt to command window*/
  467.         currentWindow = coWindow;
  468.         whichWindow = theWindow[currentWindow];
  469.         SelectWindow( whichWindow );
  470.         SetPort(whichWindow);
  471.         TEInsert( "> ", 2L, coText );
  472.         IfOutScroll( coText );
  473.         }
  474.  
  475. }
  476.